函数

fesetround (C++11)

int fesetround(int rdir);

设置舍入方向模式

设置 rdir 为 当前 浮点环境舍入方向

这个函数的返回值不一定和 cfloatFLT_ROUNDS 的值相同。

参数

rdir

以下定义为 舍入方向模式 的值之一:

宏值 描述
FE_DOWNWARD 向下舍入模式 ()
FE_TONEAREST 四舍五入模式 ()
FE_TOWARDZERO 朝零舍入模式 ()
FE_UPWARD 向上舍入模式 ()

特定的库实现可能会支持附加的 浮点舍入方向 值(它们对应的宏同样以 FE_ 开头的宏)。

C99

库可能定义在 <fenv.h>,仅仅支持上面这些宏值(其他可能没有被定义)。

C++11

至少上面所有的宏值都定义在 <fenv.h> 中(即使实现不支持)。

返回值

如果请求的浮点方向被成功设置的话,则返回 0 ,否则返回非 0 。

例子

  1. /* fesetround example */
  2. #include <stdio.h> /* printf */
  3. #include <fenv.h> /* fesetround, FE_* */
  4. #include <math.h> /* rint */
  5. #pragma STDC FENV_ACCESS on
  6. int main()
  7. {
  8. printf("rounding -3.8:\n");
  9. fesetround(FE_DOWNWARD);
  10. printf("FE_DOWNWARD: %.1f\n", rint(-3.8));
  11. fesetround(FE_TONEAREST);
  12. printf("FE_TONEAREST: %.1f\n", rint(-3.8));
  13. fesetround("FE_TOWARDZERO: %.1f\n", rint(-3.8));
  14. printf("FE_TOWARDZERO: %.1f\n", rint(-3.8));
  15. fesetround(FE_UPWARD);
  16. printf("FE_UPWARD: %.1f\n", rint(-3.8));
  17. return 0;
  18. }

可能的输出:

  1. rounding -3.8:
  2. FE_DOWNWARD: -4.0
  3. FE_TONEAREST: -4.0
  4. FE_TOWARDZERO: -3.0
  5. FE_UPWARD: -3.0

数据竞争

同时调用这个函数是安全的,不导致数据竞争。

异常

不抛出异常的保证:这个函数从不抛出异常。

另请参见

函数 描述
fegetround 获取浮点方向模式 (函数)
fesetenv 设置浮点环境 (函数)
rint 舍入至整数值 (函数)